package hero.mps.leet_code_8;

public class StringToInteger {
    public static int myAtoi(String s) {
        // 如果字符串为空或长度为0，则返回0
        if (s == null || s.length() == 0) return 0;

        // 去除字符串两端的空格
        String str = s.trim();

        // 如果处理后的字符串长度为0，则返回0
        if (str.length() == 0) return 0;

        // 符号变量，默认为正数
        int sign = 1;
        // 索引变量，从0开始
        int index = 0;

        // 如果字符串的第一个字符是'-'或'+'
        if (str.charAt(0) == '-' || str.charAt(0) == '+') {
            // 根据第一个字符设置符号
            sign = str.charAt(0) == '-' ? -1 : 1;
            // 索引加1，跳过符号字符
            index++;
        }

        // 用于构建数字字符串的StringBuilder对象
        StringBuilder numberStr = new StringBuilder();

        // 循环遍历字符串中的字符，直到遇到非数字字符或遍历完整个字符串
        while (index < str.length() && Character.isDigit(str.charAt(index))) {
            // 将当前字符添加到numberStr中
            numberStr.append(str.charAt(index));
            // 索引加1
            index++;
        }

        // 如果numberStr的长度为0，即没有数字字符，则返回0
        if (numberStr.length() == 0) return 0;

        try {
            // 将numberStr转换为整数，并乘以符号
            return Integer.parseInt(numberStr.toString()) * sign;
        }catch (NumberFormatException e) {
            // 如果转换失败，则打印异常信息
            System.out.println(e.getMessage());
            // 根据符号返回Integer的最大值或最小值
            return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
        }

    }

    public static int myAtoi1(String s) {
        // 如果字符串为空或长度为0，则返回0
        if (s == null || s.length() == 0) return 0;

        // 去除字符串两端的空格
        String str = s.trim();

        // 如果处理后的字符串长度为0，则返回0
        if (str.length() == 0) return 0;

        // 符号变量，默认为正数
        int sign = 1;

        // 索引变量，从0开始
        int index = 0;

        // 如果字符串的第一个字符是'-'或'+'，则设置符号并更新索引
        if (str.charAt(0) == '-' || str.charAt(0) == '+') {
            sign = str.charAt(0) == '-' ? -1 : 1;
            index++;
        }

        // 初始化结果为0
        int result = 0;

        // 当索引小于字符串长度且当前字符为数字时，进行循环
        while (index < str.length() && Character.isDigit(str.charAt(index))) {

            // 将当前字符转换为数字
            int digit = str.charAt(index) - '0';

            // 如果结果加上当前数字会超过Integer.MAX_VALUE，则返回对应的极值
            if (result > (Integer.MAX_VALUE - digit) / 10) {
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }

            // 更新结果
            result = result * 10 + digit;

            // 索引加1
            index++;
        }

        // 返回最终结果
        return  result * sign;

    }
    public static void main(String[] args) {
        System.out.println(myAtoi1("   -042"));
    }
}
